package cn.zzz.openplatform.txlbs.model.search;

import cn.zzz.openplatform.txlbs.model.TxlbsLocation;
import cn.zzz.openplatform.txlbs.model.TxlbsOpenApiResponse;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.util.List;

/**
 * 腾讯位置服务 搜索服务-关键词输入提示 响应参数
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class TxlbsSuggestionResponse extends TxlbsOpenApiResponse {

    /**
     * 搜索结果POI（地点）数组，每项为一个POI（地点）对象
     */
    private List<DataDTO> data;

    /**
     * 搜索公交线路数组，每项为一个公交路线对象
     */
    private List<LinesDTO> lines;

    /**
     * 子地点列表，仅在输入参数get_subpois=1时返回
     */
    private List<SubPoisDTO> sub_pois;

    /**
     * 统计结果数组
     */
    private List<ClusterDTO> cluster;

    /**
     * POI数据所属地区
     */
    private DataDTO region;

    @Data
    public static class DataDTO {

        /**
         * POI（地点）唯一标识
         */
        private String id;

        /**
         * POI（地点）名称
         */
        private String title;

        /**
         * 地址
         */
        private String address;

        /**
         * 电话
         */
        private String tel;

        /**
         * POI（地点）分类
         */
        private String category;

        /**
         * POI类型，值说明：0:普通POI / 1:公交车站 / 2:地铁站 / 3:公交线路 / 4:行政区划
         */
        private Integer type;

        /**
         * 坐标
         */
        private TxlbsLocation location;

        /**
         * 距离，单位： 米，在周边搜索、城市范围搜索传入定位点时返回
         */
        private Double _distance;

        /**
         * 行政区划信息
         */
        private AdInfoDTO adInfo;

        @Data
        public static class AdInfoDTO {

            /**
             * 行政区划代码，详见：<a href=
             * "https://lbs.qq.com/service/webService/webServiceGuide/webServiceDistrict#6">行政区划代码说明</a>
             */
            private Integer adcode;

            /**
             * 省
             */
            private String province;

            /**
             * 市，如果当前城市为省直辖县级区划，此字段会返回为空，由district字段返回。
             * <p>
             * 注：省直辖县级区划adcode第3和第4位分别为9、0，如济源市adcode为419001
             */
            private String city;

            /**
             * 区
             */
            private String district;

        }

    }

    @EqualsAndHashCode(callSuper = true)
    @Data
    public static class SubPoisDTO extends DataDTO {

        /**
         * 主地点ID，对应data中的地点ID
         */
        private String parent_id;

    }

    @Data
    public static class LinesDTO {

        /**
         * 公交线路唯一标识
         */
        private String id;

        /**
         * 公交线路名称
         */
        private String title;

        /**
         * 当前公交线路的始发站
         */
        private OriginDTO origin;

        /**
         * 当前公交线路的终点站
         */
        private DestinationDTO destination;

        @Data
        public static class OriginDTO {

            /**
             * 始发站站点名称
             */
            private String title;

        }

        @Data
        public static class DestinationDTO {

            /**
             * 终点站站点名称
             */
            private String title;

        }

    }

    @Data
    public static class ClusterDTO {

        /**
         * 城市名称
         */
        private String title;

        /**
         * 根据搜索条件，在该城市搜到的结果数
         */
        private Integer count;

    }

}